/*
 * AqueousActivity.h
 *
 *  Created on: 23 May 2011
 *      Author: allan
 */

#ifndef AQUEOUSACTIVITY_H_
#define AQUEOUSACTIVITY_H_

// C++ includes
#include <functional>
#include <string>
#include <vector>
using namespace std;
using namespace std::placeholders;

// Eigen includes
#include <Eigen/Core>
using namespace Eigen;

// GeoReact forward declarations
class AqueousSolution;

typedef std::function<const double (const AqueousSolution& sol, double T, double P, const VectorXd& n)> 
AqueousActivityModel;

const AqueousActivityModel
IdealModel();

const AqueousActivityModel
HkfIonicModel(const string& ion, const vector<string>& ions);

const AqueousActivityModel
HkfWaterModel(const vector<string>& ions);

const AqueousActivityModel
SetschenowModel();

const AqueousActivityModel
SetschenowModel(double b);

const AqueousActivityModel
SetschenowModel(const vector<double>& bi, const vector<double>& Ti);

const AqueousActivityModel
DrummondCO2Model();

#endif /* AQUEOUSACTIVITY_H_ */
